<?php
//dezend by http://www.yunlu99.com/ QQ:270656184
defined('BASEPATH') || exit('No direct script access allowed');
class CI_DB_odbc_result extends CI_DB_result
{
	public function num_rows()
	{
		if (is_int($this->num_rows)) {
			return $this->num_rows;
		}
		else if ($this->num_rows = odbc_num_rows($this->result_id) !== -1) {
			return $this->num_rows;
		}

		if (0 < count($this->result_array)) {
			return $this->num_rows = count($this->result_array);
		}
		else if (0 < count($this->result_object)) {
			return $this->num_rows = count($this->result_object);
		}

		return $this->num_rows = count($this->result_array());
	}

	public function num_fields()
	{
		return odbc_num_fields($this->result_id);
	}

	public function list_fields()
	{
		$field_names = array();
		$num_fields = $this->num_fields();

		if (0 < $num_fields) {
			for ($i = 1; $i <= $num_fields; $i++) {
				$field_names[] = odbc_field_name($this->result_id, $i);
			}
		}

		return $field_names;
	}

	public function field_data()
	{
		$retval = array();
		$i = 0;
		$odbc_index = 1;

		for ($c = $this->num_fields(); $i < $c; $i++, $odbc_index++) {
			$retval[$i] = new stdClass();
			$retval[$i]->name = odbc_field_name($this->result_id, $odbc_index);
			$retval[$i]->type = odbc_field_type($this->result_id, $odbc_index);
			$retval[$i]->max_length = odbc_field_len($this->result_id, $odbc_index);
			$retval[$i]->primary_key = 0;
			$retval[$i]->default = '';
		}

		return $retval;
	}

	public function free_result()
	{
		if (is_resource($this->result_id)) {
			odbc_free_result($this->result_id);
			$this->result_id = false;
		}
	}

	protected function _fetch_assoc()
	{
		return odbc_fetch_array($this->result_id);
	}

	protected function _fetch_object($class_name = 'stdClass')
	{
		$row = odbc_fetch_object($this->result_id);
		if (($class_name === 'stdClass') || !$row) {
			return $row;
		}

		$class_name = new $class_name();

		foreach ($row as $key => $value) {
			$class_name->$key = $value;
		}

		return $class_name;
	}
}

if (!function_exists('odbc_fetch_array')) {
	function odbc_fetch_array(&$result, $rownumber = 1)
	{
		$rs = array();

		if (!odbc_fetch_into($result, $rs, $rownumber)) {
			return false;
		}

		$rs_assoc = array();

		foreach ($rs as $k => $v) {
			$field_name = odbc_field_name($result, $k + 1);
			$rs_assoc[$field_name] = $v;
		}

		return $rs_assoc;
	}
}

if (!function_exists('odbc_fetch_object')) {
	function odbc_fetch_object(&$result, $rownumber = 1)
	{
		$rs = array();

		if (!odbc_fetch_into($result, $rs, $rownumber)) {
			return false;
		}

		$rs_object = new stdClass();

		foreach ($rs as $k => $v) {
			$field_name = odbc_field_name($result, $k + 1);
			$rs_object->$field_name = $v;
		}

		return $rs_object;
	}
}

?>
